package com.utils;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;

@Component
public class RedisUtils {
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;


    /**
     * 存储 Token 到 Redis
     * @param token Token 字符串
     * @param userId 用户ID
     * @param expiration 过期时间（毫秒）
     */
    public void saveToken(String token, String userId, long expiration) {
        // 使用 token 作为 key，userId 作为 value
        redisTemplate.opsForValue().set(
                "token:" + token,
                userId,
                expiration,
                TimeUnit.MILLISECONDS
        );
    }

    /**
     * 从 Redis 获取 Token 对应的用户ID
     * @param token Token 字符串
     * @return 用户ID，如果不存在则返回 null
     */
    public String getUserIdByToken(String token) {
        return (String) redisTemplate.opsForValue().get("token:" + token);
    }

    /**
     * 从 Redis 删除 Token
     * @param token Token 字符串
     */
    public void deleteToken(String token) {
        redisTemplate.delete("token:" + token);
    }

    /**
     * 验证 Token 是否存在于 Redis
     * @param token Token 字符串
     * @return 是否存在
     */
    public boolean validateToken(String token) {
        return redisTemplate.hasKey("token:" + token);
    }

    /**
     * 获取 key 的剩余过期时间
     * @param key key
     * @param timeUnit 时间单位
     * @return 剩余过期时间
     */
    public Long getExpire(String key, TimeUnit timeUnit) {
        return redisTemplate.getExpire(key, timeUnit);
    }
}
